package com.buaa.divinationmaster.core.algorithm;

import com.buaa.divinationmaster.core.constants.DivinationType;

/**
 * 占卜算法基础接口
 * 所有具体占卜算法（塔罗牌、梅花易数、金钱卦、雷诺曼）都应实现此接口
 * 
 * @param <T> 占卜结果类型，继承自DivinationResult
 */
public interface DivinationAlgorithm<T extends DivinationResult> {
    
    /**
     * 执行占卜算法
     * @param input 占卜输入参数
     * @return 占卜结果
     * @throws DivinationException 占卜过程中的异常
     */
    T performDivination(DivinationInput input) throws DivinationException;
    
    /**
     * 验证输入参数有效性
     * @param input 输入参数
     * @return 是否有效
     */
    boolean validateInput(DivinationInput input);
    
    /**
     * 获取算法类型
     * @return 占卜类型枚举
     */
    DivinationType getType();
    
    /**
     * 获取算法版本信息
     * @return 版本字符串
     */
    default String getVersion() {
        return "1.0.0";
    }
    
    /**
     * 获取算法描述
     * @return 算法描述
     */
    default String getDescription() {
        return "基础占卜算法";
    }
    
    /**
     * 检查算法是否支持特定功能
     * @param feature 功能名称
     * @return 是否支持
     */
    default boolean supportsFeature(String feature) {
        return false;
    }
    
    /**
     * 获取算法配置信息
     * @return 配置信息
     */
    default AlgorithmConfig getConfig() {
        return new AlgorithmConfig();
    }
    
    /**
     * 重置算法状态 (如果算法有内部状态)
     */
    default void reset() {
        // 默认实现为空，具体算法可根据需要重写
    }
}
